home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / bstring / RCS / bcmp.c,v < prev    next >
Text File  |  1992-05-14  |  5KB  |  234 lines

  1. head     1.5;
  2. branch   ;
  3. access   ;
  4. symbols  sprited:1.3.1;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.5
  10. date     92.05.14.18.58.01;  author kupfer;  state Exp;
  11. branches ;
  12. next     1.4;
  13.  
  14. 1.4
  15. date     92.03.27.13.32.42;  author rab;  state Exp;
  16. branches ;
  17. next     1.3;
  18.  
  19. 1.3
  20. date     91.03.24.19.02.17;  author kupfer;  state Exp;
  21. branches 1.3.1.1;
  22. next     1.2;
  23.  
  24. 1.2
  25. date     88.07.19.13.26.07;  author mendel;  state Exp;
  26. branches ;
  27. next     1.1;
  28.  
  29. 1.1
  30. date     88.04.25.21.39.21;  author ouster;  state Exp;
  31. branches ;
  32. next     ;
  33.  
  34. 1.3.1.1
  35. date     91.12.02.21.27.52;  author kupfer;  state Exp;
  36. branches ;
  37. next     ;
  38.  
  39.  
  40. desc
  41. @@
  42.  
  43.  
  44. 1.5
  45. log
  46. @Remove the debug check for bogus accesses to user addresses.  Use the
  47. ANSI signature (void pointers, etc).
  48. @
  49. text
  50. @/* 
  51.  * bcmp.c --
  52.  *
  53.  *    Source code for the "bcmp" library routine.
  54.  *
  55.  * Copyright 1988 Regents of the University of California
  56.  * Permission to use, copy, modify, and distribute this
  57.  * software and its documentation for any purpose and without
  58.  * fee is hereby granted, provided that the above copyright
  59.  * notice appear in all copies.  The University of California
  60.  * makes no representations about the suitability of this
  61.  * software for any purpose.  It is provided "as is" without
  62.  * express or implied warranty.
  63.  */
  64.  
  65. #ifndef lint
  66. static char rcsid[] = "$Header: /sprite/src/lib/c/bstring/RCS/bcmp.c,v 1.4 92/03/27 13:32:42 rab Exp Locker: kupfer $ SPRITE (Berkeley)";
  67. #endif not lint
  68.  
  69. #include <bstring.h>
  70. #include <machparam.h>
  71.  
  72. /*
  73.  * The following mask is used to detect proper alignment of addresses
  74.  * for doing word operations instead of byte operations.  It is
  75.  * machine-dependent.  If none of the following bits are set in an
  76.  * address, then word-based operations may be used. This value is imported
  77.  * from machparam.h
  78.  */
  79.  
  80. #define WORDMASK WORD_ALIGN_MASK
  81.  
  82. /*
  83.  *----------------------------------------------------------------------
  84.  *
  85.  * bcmp --
  86.  *
  87.  *    Compare two blocks of memory for equality.  This routine is
  88.  *    optimized to do integer compares.  However, if either sourcePtr
  89.  *    or destPtr points to non-word-aligned addresses then it is
  90.  *    forced to do single-byte compares.
  91.  *
  92.  * Results:
  93.  *    The return value is zero if the blocks at sourcePtr and destPtr
  94.  *    are identical, non-zero if they differ.
  95.  *
  96.  * Side effects:
  97.  *    None.
  98.  *
  99.  *----------------------------------------------------------------------
  100.  */
  101.  
  102. int
  103. bcmp(sourceVoidPtr, destVoidPtr, numBytes)
  104.     _CONST _VoidPtr sourceVoidPtr;     /* Where to compare from */
  105.     _CONST _VoidPtr destVoidPtr;    /* Where to compare to */
  106.     register int numBytes;        /* The number of bytes to compare */
  107. {
  108.     register _CONST char *sourcePtr = sourceVoidPtr;
  109.     register _CONST char *destPtr = destVoidPtr;
  110.  
  111.     /*
  112.      * If both the sourcePtr and the destPtr point to aligned addesses then
  113.      * compare as much as we can in integer units.  Once we have less than
  114.      * a whole int to compare then it must be done by byte compares.
  115.      */
  116.  
  117.     if ((((int) sourcePtr & WORDMASK) == 0)
  118.         && (((int) destPtr & WORDMASK) == 0)) {
  119.     while (numBytes >= sizeof(int)) {
  120.         if (*(int *) destPtr != *(int *) sourcePtr) {
  121.         return 1;
  122.         }
  123.         sourcePtr += sizeof(int);
  124.         destPtr += sizeof(int);
  125.         numBytes -= sizeof(int);
  126.     }
  127.     }
  128.  
  129.     /*
  130.      * Compare the remaining bytes
  131.      */
  132.  
  133.     while (numBytes > 0) {
  134.     if (*destPtr != *sourcePtr) {
  135.         return 1;
  136.     }
  137.     ++destPtr;
  138.     ++sourcePtr;
  139.     numBytes--;
  140.     }
  141.  
  142.     return 0;
  143. }
  144. @
  145.  
  146.  
  147. 1.4
  148. log
  149. @Fixed a couple lint errors.
  150. @
  151. text
  152. @d17 1
  153. a17 1
  154. static char rcsid[] = "$Header: /sprite/src/lib/c/bstring/RCS/bcmp.c,v 1.3 91/03/24 19:02:17 kupfer Exp Locker: rab $ SPRITE (Berkeley)";
  155. d20 3
  156. a30 2
  157. #include "machparam.h"
  158.  
  159. a32 4
  160. #ifdef KERNEL
  161. #include <vmHack.h>
  162. #endif
  163.  
  164. d54 3
  165. a56 3
  166. bcmp(sourcePtr, destPtr, numBytes)
  167.     register char *sourcePtr;        /* Where to compare from */
  168.     register char *destPtr;        /* Where to compare to */
  169. d59 3
  170. a61 4
  171. #ifdef VM_CHECK_BSTRING_ACCESS
  172.     Vm_CheckAccessible(sourcePtr, numBytes);
  173.     Vm_CheckAccessible(destPtr, numBytes);
  174. #endif
  175. @
  176.  
  177.  
  178. 1.3
  179. log
  180. @Small hack so that the kernel can check for incorrect references to
  181. user addresses.
  182. @
  183. text
  184. @d17 1
  185. a17 1
  186. static char rcsid[] = "$Header: /sprite/src/lib/c/bstring/RCS/bcmp.c,v 1.2 88/07/19 13:26:07 mendel Exp Locker: kupfer $ SPRITE (Berkeley)";
  187. d89 1
  188. a89 1
  189.     if (*destPtr++ != *sourcePtr++) {
  190. d92 2
  191. @
  192.  
  193.  
  194. 1.3.1.1
  195. log
  196. @Initial branch for Sprite server.
  197. @
  198. text
  199. @d17 1
  200. a17 1
  201. static char rcsid[] = "$Header: /sprite/src/lib/c/bstring/RCS/bcmp.c,v 1.3 91/03/24 19:02:17 kupfer Exp Locker: rab $ SPRITE (Berkeley)";
  202. @
  203.  
  204.  
  205. 1.2
  206. log
  207. @Import WORD_ALIGN_MASK from machparam.h.
  208. @
  209. text
  210. @d17 1
  211. a17 1
  212. static char rcsid[] = "$Header: bcmp.c,v 1.1 88/04/25 21:39:21 ouster Exp $ SPRITE (Berkeley)";
  213. d31 5
  214. d62 4
  215. @
  216.  
  217.  
  218. 1.1
  219. log
  220. @Initial revision
  221. @
  222. text
  223. @d17 1
  224. a17 1
  225. static char rcsid[] = "$Header: bcmp.c,v 1.1 88/04/25 13:25:41 ouster Exp $ SPRITE (Berkeley)";
  226. d24 2
  227. a25 2
  228.  * address, then word-based operations may be used.  Eventually this
  229.  * mask needs to be handled in a more machine-independent fashion.
  230. d28 3
  231. a30 1
  232. #define WORDMASK 0x1
  233. @
  234.